﻿using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ConsoleApp;

public class DemoJson
{
    //方式一：使用JavaScriptSerializer
    //需要先添加System.Web.Extensions引用（微软自带）
    public void demo1()
    {
        // //定义一个测试list
        // List<decimal[]> list = new List<decimal[]>();
        // for (int i = 0; i < 5; i++)
        // {
        //     list .Add(new decimal[] { 100+i , i});
        // }
        // //把List集合转换为json字符串
        // JavaScriptSerializer serializer = new JavaScriptSerializer();
        // string jsonData = serializer.Serialize(list);
        // //MessageBox.Show(jsonData);
        //
        // //实例化JavaScriptSerializer类的新实例
        // //将指定的 JSON 字符串转换为List集合
        // List<decimal[]> list2 = serializer.Deserialize<List<decimal[]>>(jsonData);
    }

    //方式二：使用JsonConvert
    //需要引用Newtonsoft.Json.dll库（请自行下载对应的版本）
    public void demo2()
    {
        //定义一个测试list
        List<decimal[]> list = new List<decimal[]>();
        for (int i = 0; i < 5; i++)
        {
            list.Add(new decimal[] { 100 + i, i });
        }
        //把List集合转换为json字符串
        string jsonData = JsonConvert.SerializeObject(list);
        
         
        //把json字符串转换为List集合
        List<decimal[]> list2 = JsonConvert.DeserializeObject<List<decimal[]>>(jsonData);
        if (list2 != null)
        {
            foreach (var info in list2)
            {
                Console.WriteLine("第一个值：" + info[0] + "，第二个值" + info[1]);
            }
        }
    }

    // 方式三：System.Text.Json 是 .NET Core 3.0 及以上
    //JsonSerializer.Serialize()
    //JsonSerializer.Deserialize()

    //拼接Json串
    public static void StringBuilder()
    {
        var str = new StringBuilder();
        str.Append("{");
        str.Append("AccessKey:\"" + 11 + "\",");
        str.Append("mc:\"" + 22 + "\",");
        str.Append("qd:\"" + 33 + "\"");
        str.Append("}");
        string serJson = str.ToString();
    }
    
    public static void String()
    {
        string serJon = "{AccessKey:\"" + 11 + "\",mc:\"" + 22 + "\"}";
    }

    public static void StringFormat()
    {
        string mc = "22";
        string id = "11";
        string serJson = string.Format("[{{ AccessKey:\"{0}\",mc:\"{1}\"}},{{ AccessKey:\"{2}\",mc:\"{3}\"}}]", id, mc, "33", "44");
    }

    public static void Test()
    {
        // JSON字符串
        string str = "{\"code\":123,\"msg\":\"err...\"}";

        string jsonString = @"{
            ""name"": ""John Doe"",
            ""age"": 30,
            ""isStudent"": false,
            ""subjects"": [""Math"", ""Science""]
        }";

        JObject jobject = JObject.Parse(str);
        if (jobject.Property("code") == null || jobject.Property("code").ToString() == "")
        {
            Console.WriteLine("键值key不存在！");
        }
        //或者
        bool hasCode = jobject.Properties().Any(p => p.Name == "code");
        //bool hasCode = (jobject.Property("code") != null);
        foreach (JProperty item in jobject.Properties())
        {
            Console.WriteLine(item.Name + ":" + item.Value);
        }
    }
}